<?php

namespace Api\Pay;

use Core\Env;

/**
 * Class Cashier
 * @package Api\Pay
 * @description 收银台服务
 */
class Cashier extends Base {

    const URI_ORDER_APPLY = "cashier/order/apply";  //订单申请
    const DEFAULT_EXPIRE = 600;  //默认订单时效

    const URL_CASHIER_MAIN_PRD = "https://www.fenqilianmeng.com/pay/web/";  //生产收银台入口页面
    const URL_CASHIER_MAIN_DEV = "http://pay.i.hrbbwx.com/web/";  //测试收银台入口页面

    /**
     * 证件类型
     */
    const CERT_TYPE_ID_CARD = "01";  //身份证
    /**
     * 订单申请
     *
     * @param string $appkey 应用appkey
     * @param string $inner_mer_id 内部商户号
     * @param string $uid 用户uid
     * @param string $buz_id 业务订单号
     * @param int $amt 订单金额, 单位: 人民币-分
     * @param string $description 订单描述
     * @param string $request_time 请求时间, 1970至今秒数
     * @param int $expire default 600 订单过期时间, 不少于600s，默认600s
     * @param array $options default array() 订单选项参数:
     *                                       cert_type     string 证件类型 01-身份证, uid倘若已实名认证需要上送, 防止用户在收银台重复身份认证
     *                                       cert_no       string 证件号码, uid倘若已实名认证需要上送, 防止用户在收银台重复身份认证
     *                                       name          string 用户姓名, uid倘若已实名认证需要上送, 防止用户在收银台重复身份认证
     *                                       wechat_openid string 微信openid, 公众号内H5页面支付必送
     * @param string $callback_url default null 业务交易结果异步通知url
     * @param string $redirect_url default null 收银台页面跳转url, 不上送使用收银台默认跳转页面
     * @param bool $credit_flag default true 是否支持信用卡, 默认
     *
     * @return string|bool 成功返回收银台页面访问url, 失败返回false
     */
    public function applyOrder($appkey, $inner_mer_id, $uid, $buz_id, $amt, $description, $request_time, $expire = self::DEFAULT_EXPIRE,
                               array $options = array(), $callback_url = null, $redirect_url = null, $credit_flag = true) {
        $params = array(
            "mer_id" => $inner_mer_id,
            "uid" => $uid,
            "buz_id" => $buz_id,
            "request_time" => $request_time,
            "expire" => $expire,
            "amt" => $amt,
            "description" => $description,
            "options" => json_encode($options),
            "callback_url" => $callback_url,
            "redirect_url" => $redirect_url,
            "credit_flag" => $credit_flag,
        );

        $resp_data = $this->request($appkey, self::URI_ORDER_APPLY, $params);
        if (!$resp_data || !$resp_data["result"]) {
            return false;
        }
        $token = $resp_data["token"];

        $url = (Env::isProductEnv() ? self::URL_CASHIER_MAIN_PRD : self::URL_CASHIER_MAIN_DEV);

        return $url . "cashier/main?key={$appkey}&mer_id={$inner_mer_id}&buz_id={$buz_id}&token={$token}&expire={$expire}";
    }

} 